package com.cskaoyan.javase.oop1._15access._3why;

import java.util.Arrays;

/**
 * 为什么使用访问权限修饰符?
 * 最浅显的,使用访问权限修饰符可以控制访问权限,但是访问权限不是牢不可破的
 * 就好比房间的锁是可以强行破开的
 * 所以Java的访问权限修饰符的使用还有更深层次的含义
 *
 *给门加锁，是警告你不能逾越界限，否则就是违法操作一样。
 * 访问权限的使用，最基本的，自然是用来控制访问权限的，语法上强制明确使用者哪里可以用，哪里不行。
 * 但也隐含了警告和暗示的作用：
 * 告诉代码的使用者，哪些地方不要触碰，哪些地方应该使用。起到警告、约束和指导代码使用者的功能。
 *
 * 使用访问权限修饰符对代码的使用者的好处,指导代码使用者来使用代码,比如:
 *      1.如果代码的某些部分不需要代码的使用者去触碰,查看
 *          没有必要查看和使用,那么这部分代码应该使用private修饰
 *          具体的:
 *          a.工具类,所有的方法都是静态的,使用时完全不需要创建对象,只需要类名点使用
 *          那么创建对象对于工具类来说就是不必要的操作,是错误的操作
 *          于是在设计工具类,为了指导使用者,直接私有化构造器,避免在外界被创建对象
 *          所有的工具类的构造器都必须私有化,否则这个工具类的设计就不合格.
 *
 *          b.中间方法,过程方法对外界而言是没有意义的,这些方法应该私有化
 *              外界不需要查看这些方法的实现,更不需要使用这些方法
 *
 *      2.专门提供给外界使用的，推荐使用的，用public。
 *      告诉别人：这里是你需要关注、了解和使用的地方。
 *      所有明确提供给外界使用，实现功能的方法，需要用public修饰。
 *
 * 以上总结一下合理使用访问权限修饰符,对代码使用者的好处:
 *      1.让代码使用者更加专注于更需要专注的地方,提高使用的效率,避免去浪费无谓的时间
 *      2.也能够让代码的使用者更加合理的使用代码
 *
 * 所以，我们就可以总结出，我们在实际开发中，使用类中结构的访问权限修饰符的原则：
 *      1.尽量私有化，方便自己修改代码，隐藏实现细节。
 *      2.如果不能私有化，那也应该尽量少的给予访问权限，先从默认权限开始考虑。
 *      只有确定这个结构，一定需要在外部（尤其是不同包下）被访问时，才考虑给public，尽量少给public。
 * 权限这个东西，要吝啬，不要"大方"！
 *
 * @since 14:53
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 'Arrays()' has private access in 'java.util.Arrays'
        // new Arrays();
        test();
    }

    /*
        假如test方法是实现某个需求的,那么test2方法就是实现需求过程中的一个中间方法,过程方法
        这种方法是没有必要给外界访问权限的,应该私有化,这就是中间方法私有化,是一个很重要的代码规范.
      */
    public static void test() {
        test2();
    }

    // Access can be private
    public static void test2() {

    }
}
